home *** CD-ROM | disk | FTP | other *** search
/ Giga Games 1 / Giga Games.iso / net / hack / 3_1_3 / sys / amiga / cvtsnd.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-12-31  |  2.0 KB  |  116 lines

  1. /*    SCCS Id: @(#)cvtsnd.c    3.1    93/1/28    */
  2. /*     Copyright (c) 1993 by Gregg Wonderly */
  3. /* NetHack may be freely redistributed.  See license for details. */
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <fcntl.h>
  8. #include <string.h>
  9. #include <exec/types.h>
  10.  
  11. void process_snd( char *, char * );
  12. char *basename( char * );
  13.  
  14. typedef struct AIFFHEAD
  15. {
  16.     short namelen;
  17.     char name[62];
  18.     short leneq64;
  19.     char form[4];
  20.     char stuff[10+16+32];
  21.     char FORM[4];
  22.     long flen;
  23.     char AIFF[4];
  24.     char SSND[4];
  25.     long sndlen;
  26. } AIFFHEAD;
  27.  
  28. typedef struct VHDR
  29. {
  30.     char name[4];
  31.     long len;
  32.     unsigned long oneshot, repeat, samples;
  33.     UWORD freq;
  34.     UBYTE n_octaves, compress;
  35.     LONG volume;
  36. } VHDR;
  37.  
  38. typedef struct IFFHEAD
  39. {
  40.     char FORM[4];
  41.     long flen;
  42.     char _8SVX[4];
  43.     VHDR vhdr;
  44. } IFFHEAD;
  45.  
  46. main( argc, argv )
  47.     int argc;
  48.     char **argv;
  49. {
  50.     if( argc != 3 )
  51.     {
  52.         fprintf( stderr, "usage: %s source-file dest-file\n", argv[ 0 ] );
  53.         exit( 1 );
  54.     }
  55.  
  56.     process_snd( argv[1], argv[2] );
  57. }
  58.  
  59. void
  60. process_snd( src, dest )
  61.     char *src, *dest;
  62. {
  63.     int n;
  64.     AIFFHEAD aih;
  65.     IFFHEAD ih;
  66.     long len;
  67.     int fd, nfd;
  68.     char buf[ 300 ];
  69.  
  70.     fd = open( src, 0 );
  71.     if( fd == -1 )
  72.     {
  73.         perror( src );
  74.         return;
  75.     }
  76.  
  77.     read( fd, &aih, sizeof( aih ) );
  78.     nfd = creat( dest, 0777 );
  79.     memcpy( ih.FORM, "FORM", 4 );
  80.     memcpy( ih._8SVX, "8SVX", 4 );
  81.     ih.flen = aih.sndlen + sizeof( IFFHEAD ) + 8;
  82.     memcpy( ih.vhdr.name, "VHDR", 4 );
  83.     ih.vhdr.len = 20;
  84.     ih.vhdr.oneshot = aih.sndlen;
  85.     ih.vhdr.repeat = 0;
  86.     ih.vhdr.samples = 0;
  87.     ih.vhdr.freq = 22000;
  88.     ih.vhdr.n_octaves = 1;
  89.     ih.vhdr.compress = 0;
  90.     ih.vhdr.volume = 0x10000;
  91.  
  92.     write( nfd, &ih, sizeof( ih ) );
  93.     write( nfd, "NAME", 4 );
  94.     len = aih.namelen;
  95.     write( nfd, &len, 4 );
  96.     write( nfd, aih.name, ( strlen( aih.name ) + 1 ) & ~1 );
  97.     write( nfd, "BODY", 4 );
  98.     write( nfd, &aih.sndlen, 4 );
  99.  
  100.     while( ( n = read( fd, buf, sizeof( buf ) ) ) > 0 )
  101.         write( nfd, buf, n );
  102.     close( fd );
  103.     close( nfd );
  104. }
  105.  
  106. char *basename( str )
  107.     char *str;
  108. {
  109.     char *t;
  110.     if( t = strrchr( str, '/' ) )
  111.         return(t);
  112.     if( t = strrchr( str, ':' ) )
  113.         return(t);
  114.     return( str );
  115. }
  116.